package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.cache.Java0509Cache;
import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.service.ItemService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 商品详情控制层
 */
@RestController
@RequestMapping("/api/item")
public class ItemController {

    @Resource
    private ItemService itemService;

    /**
     * 显示商品详情
     * @param skuId
     * @return
     */
    @Java0509Cache(prefix = "getSkuInfo:")
    @GetMapping("/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable(value = "skuId") Long skuId){
        return itemService.getSkuInfo(skuId);
    }

    /**
     * 查询商品图片集合
     * @param skuId
     * @return
     */
    @Java0509Cache(prefix = "getSkuImage:")
    @GetMapping("/getSkuImage/{skuId}")
    public List<SkuImage> getSkuImage(@PathVariable("skuId") Long skuId){
        return itemService.getSkuImage(skuId);
    }

    /**
     * 查询商品价格
     * @param skuId
     * @return
     */
    @Java0509Cache(prefix = "getPrice:")
    @GetMapping("/getPrice/{skuId}")
    public BigDecimal getPrice(@PathVariable("skuId") Long skuId){
        return itemService.getPrice(skuId);
    }

    /**
     * 根据三级分类Id查询分类
     * @param category3Id
     * @return
     */
    @Java0509Cache(prefix = "getCategory:")
    @GetMapping("/getCategory/{category3Id}")
    public BaseCategoryView getCategory(@PathVariable("category3Id") Long category3Id){
        return itemService.getCategory(category3Id);
    }

    /**
     * 根据SkuId spuId查询平台销售属性名和值，并显示选定的值
     * @param spuId
     * @param skuId
     * @return
     */
    @Java0509Cache(prefix = "getSpuSaleAttr:")
    @GetMapping("/getSpuSaleAttr/{skuId}/{spuId}")
    public List<SpuSaleAttr> getSpuSaleAttr(@PathVariable("skuId") Long skuId,
                                            @PathVariable("spuId") Long spuId){
       return itemService.getSpuSaleAttr(skuId,spuId);
    }

    /**
     * 根据指定的spu的id查询这个spu所拥有的全部sku的id和每个sku对应的销售属性值的内容
     * @param spuId
     * @return
     */
    @Java0509Cache(prefix = "getSkuValuesBySpu:")
    @GetMapping("/getSkuValuesBySpu/{spuId}")
    public Map getSkuValuesBySpu(@PathVariable("spuId") Long spuId){
        return itemService.getSkuValuesBySpu(spuId);
    }

    /**
     * 根据id 查询品牌信息
     * @param id
     * @return
     */
    @GetMapping("/getTrademark/{id}")
    @Java0509Cache(prefix ="getTrademark:" )
    public BaseTrademark getTrademark(@PathVariable("id") Long id){
        return itemService.getTrademark(id);
    }

    /**
     * 获取平台属性
     * @param skuId
     * @return
     */
    @Java0509Cache(prefix = "getSkuAttrValue:")
    @GetMapping("/getSkuAttrValue/{skuId}")
    public List<BaseAttrInfo> getSkuAttrValue(@PathVariable("skuId") Long skuId){
        return itemService.getSkuAttrValue(skuId);
    }

    /**
     * 扣减商品库存
     * @param detailMap
     */
    @GetMapping("/deductSku")
    public void deductSku(@RequestParam Map<String, String> detailMap){
        itemService.deductSku(detailMap);
    }

    /**
     * 回滚库存
     * @param rollbackMap
     */
    @GetMapping("/rollBackStock")
    public void rollBackStock(Map<String, String> rollbackMap){
        itemService.rollBackStock(rollbackMap);
    }
}
